#include "cconfiguracao.h"

const QString CConfiguracao::c_basePrincipal = "principal";

CConfiguracao::CConfiguracao(QObject *parent) :
    QObject(parent)
{
    this->VerificarBaseAplicacao();
    this->CarregarConfiguracao();    
    QObject::connect(this, SIGNAL(textoEmailApresentacaoChanged()), this, SLOT(atualizarTextoEmail()));
    QObject::connect(this, SIGNAL(contaEmailEnvioChanged()), this, SLOT(atualizarContaEmail()));    
    QObject::connect(this, SIGNAL(caminhoDocumentCurriculoChanged()), this, SLOT(atualizarCaminhoCurriculo()));    
}

void CConfiguracao::CarregarConfiguracao()
{    
    QSqlQuery q(QSqlDatabase::database(c_basePrincipal));
    QString sql = "select textoEmail, contaEmail, nomeArquivoCurriculo, dataUltimaAtualizacao, corVagaContatada, corVagaNova from configuracao";
    q.exec(sql);
    if (q.next())
    {
        _textoEmail = q.value(0).toString();
        _contaEmail = q.value(1).toString();
        _nomeCurriculo = q.value(2).toString();
        _dataUltimaAtualizacao = q.value(3).toDateTime();
        _corVagaContatada = QColor(q.value(4).toString());
        _corVagaNova = QColor(q.value(5).toString());
        emit curriculoSelecionadoChanged();
    }
}

void CConfiguracao::VerificarBaseAplicacao()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", c_basePrincipal);
    QDir appPath(QDir::currentPath());
    QString strDir = appPath.absolutePath() + "/principal.db";
    strDir = QDir::toNativeSeparators(strDir);
    db.setDatabaseName(strDir);
    if (db.open())
    {
        QSqlQuery q(db);
        q.exec("create table if not exists vagas ( "
               "vaga integer, "
               "estado varchar(2), "
               "cidade varchar(50), "
               "cargo varchar(100), "
               "descricao varchar(1000), "
               "empresa varchar(100), "
               "tituloEmail varchar(100), "
               "data datetime, "
               "contato varchar(100), "
               "primary key(vaga))");
        if (q.lastError().isValid())
            qDebug() << "VerificarBaseAplicacao:: " << q.lastError();
        q.exec("create table if not exists emailsEnviados ( "
               "vaga integer, "
               "dataContato datetime, "
               "mensagemEmailContato varchar(1000), "
               "primary key(vaga), "
               "foreign key(vaga) references vagas(vaga))");
        if (q.lastError().isValid())
            qDebug() << "VerificarBaseAplicacao:: " << q.lastError();
        q.exec("create table if not exists vagasMarcadas ( "
               "vaga integer, "
               "dataMarcacao datetime,"
               "primary key(vaga),"
               "foreign key(vaga) references vagas(vaga))");
        if (q.lastError().isValid())
            qDebug() << "VerificarBaseAplicacao:: " << q.lastError();
        /*configuracao*/
        q.exec("create table if not exists configuracao ( "
               "textoEmail varchar(400),"
               "contaEmail varchar(100),"
               "nomeArquivoCurriculo varchar(50),"
               "dataUltimaAtualizacao datetime,"
               "corVagaContatadaa varchar(7),"
               "corVagaNova varchar(7)"
               ")");        
        q.exec("select count(*) from configuracao");
        q.next();
        //deixar somente uma linha na tabela
        if (q.value(0).toInt() == 0)
        {
            q.exec("insert into configuracao(textoEmail, contaEmail) values (null, null)");
        }
        if (q.lastError().isValid())
            qDebug() << "VerificarBaseAplicacao:: " << q.lastError();
        /*====*/
    }
}

void CConfiguracao::atualizarTextoEmail()
{
    QSqlQuery q(QSqlDatabase::database(c_basePrincipal));
    QString query = "update configuracao "
            "set textoEmail = :texto";
    q.prepare(query);
    q.bindValue(":texto", _textoEmail);
    q.exec();
}

void CConfiguracao::atualizarContaEmail()
{
    QSqlQuery q(QSqlDatabase::database(c_basePrincipal));
    QString query = "update configuracao "
            "set contaEmail = :conta";
    q.prepare(query);
    q.bindValue(":conta", _contaEmail);
    q.exec();
}

void CConfiguracao::atualizarCaminhoCurriculo()
{
    QSqlQuery q(QSqlDatabase::database(c_basePrincipal));
    QString query = "update configuracao "
            "set nomeArquivoCurriculo = :caminho";
    q.prepare(query);
    q.bindValue(":caminho", _nomeCurriculo);
    q.exec();
}

void CConfiguracao::atualizarDataUltimaAtualizacao()
{
    _dataUltimaAtualizacao = QDateTime::currentDateTime();
    emit dataUltimaAtualizacaoChanged();
    QSqlQuery q(QSqlDatabase::database(c_basePrincipal));
    QString query = "update configuracao "
            "set dataUltimaAtualizacao = :data";
    q.prepare(query);
    q.bindValue(":data", _dataUltimaAtualizacao);
    q.exec();        
}

void CConfiguracao::setCorVagaContatada(QColor cor)
{
    _corVagaContatada = cor;
    QSqlQuery q(QSqlDatabase::database(c_basePrincipal));
    q.prepare("update configuracao set corVagaContatada = :cor");
    q.bindValue(":cor", cor.name());
    q.exec();
    emit corVagaContatadaChanged();
}

void CConfiguracao::setCorVagaNova(QColor cor)
{
    _corVagaNova = cor;
    QSqlQuery q(QSqlDatabase::database(c_basePrincipal));
    q.prepare("update configuracao set corVagaNova = :cor");
    q.bindValue(":cor", cor.name());
    q.exec();
    emit corVagaNovaChanged();
}


